package com.smartcity.result;

import lombok.Data;

import java.util.List;

@Data
public class Result<T> {
    // 操作代码
    Integer code;

    // 提示信息
    String msg;

    // 结果数据
    T data;
//    获取列表数据
    List<T> rows;
//    列表数据条数
    int total;



    /**
     * 响应吗和msg消息，无数据
     * @param resultCode
     */
    public Result(ResultEnum resultCode) {
        this.code = resultCode.code();
        this.msg = resultCode.message();
    }

    /**
     * 响应码和msg消息，单个数据，用户返回单个数据对象
     * @param resultCode
     * @param data
     */
    public Result(ResultEnum resultCode, T data) {
        this.code = resultCode.code();
        this.msg = resultCode.message();
        this.data = data;
    }
    /**
     * 响应码和msg消息，数据列表
     * @param resultCode  响应码
     * @param rows  列表数据
     * @param total  列表数据条数
     */
    public Result(ResultEnum resultCode, List<T> rows,int total) {
        this.code = resultCode.code();
        this.msg = resultCode.message();
        this.rows = rows;
        this.total=total;
    }



    public Result(String msg) {
        this.msg = msg;
    }
    //成功返回封装-无数据
    public static Result<String> success() {
        return new Result<String>(ResultEnum.SUCCESS);
    }
    //成功返回封装-带数据
    public static <T> Result<T> success(T data) {
        return new Result<T>(ResultEnum.SUCCESS, data);
    }
    public static <T> Result<T> success(List<T> rows,int total) {
        return new Result<T>(ResultEnum.SUCCESS, rows,total);
    }
    //失败返回封装-使用默认提示信息
    public static Result<String> error() {
        return new Result<String>(ResultEnum.FAIL);
    }
    //失败返回封装-使用返回结果枚举提示信息
    public static Result<String> error(ResultEnum resultCode) {
        return new Result<String>(resultCode);
    }
    //失败返回封装-使用自定义提示信息
    public static Result<String> error(String message) {
        return new Result<String>(message);

    }

}
